
package DAFE;

import java.util.*;
import DTL.*;

/**
 * Classe destinée à aller chercher les données à la DB source via un web service
 * 
 */
public class DataProvider {

    /**
    * Implémentation de l'appel au web service pour lister les catégories
    * @param aWithNoChoice définit si l'on peut choisir toutes les catégories (true) ou en choisir une seule (false)
    * @return un tableau de catégories (cf. WSDL du web service)
    */
    private static ArrayOfcategorie getCategorieListWS(java.lang.Boolean aWithNoChoice) {
        DAFE.BMGCatalogue service = new DAFE.BMGCatalogue();
        DAFE.IBMGCatalogue port = service.getBasicHttpBindingIBMGCatalogue();
        return port.getCategorieList(aWithNoChoice);
    }

    /**
    * Implémentation de l'appel au web service pour lister les produits
    * @param aDescriptionNom définit les termes à rechercher dans l'intitulé et la description du produit
    * @return un tableau de produits (cf. WSDL du web service)
    */
    private static ArrayOfproduit getProduitListWS(java.lang.String aDescriptionNom) {
        DAFE.BMGCatalogue service = new DAFE.BMGCatalogue();
        DAFE.IBMGCatalogue port = service.getBasicHttpBindingIBMGCatalogue();
        return port.getProduitList(aDescriptionNom);
    }
    
    /**
    * Implémentation de l'appel au web service pour lister les produits
    * @param aDescriptionNom définit les termes à rechercher dans l'intitulé et la description du produit
    * @param aIDCAT définit l'identifiant de la catégorie à laquelle doit appartenir le produit
    * @return un tableau de produits (cf. WSDL du web service)
    */
    private static ArrayOfproduit getProduitListDansCategorieWS(java.lang.String aDescriptionNom, java.lang.Integer aIDCAT) {
        DAFE.BMGCatalogue service = new DAFE.BMGCatalogue();
        DAFE.IBMGCatalogue port = service.getBasicHttpBindingIBMGCatalogue();
        return port.getProduitListDansCategorie(aDescriptionNom, aIDCAT);
    }
    
    /**
    * Implémentation de l'appel au web service pour obtenir les caractéristiques d'un produit
    * @param aIDPRO définit l'identifiant du produit
    * @return un produit (cf. WSDL du web service)
    */
    private static Produit getProduitWS(java.lang.Integer aIDPRO) {
        DAFE.BMGCatalogue service = new DAFE.BMGCatalogue();
        DAFE.IBMGCatalogue port = service.getBasicHttpBindingIBMGCatalogue();
        return port.getProduit(aIDPRO);
    }

    
    /**
    * Implémentation d'une méthode pour formater la liste des catégories conformément à l'application Web
    * @param aWithNoChoice définit si l'on peut choisir toutes les catégories (true) ou en choisir une seule (false)
    * @return une liste de catégories (cf. DTL)
    */
    public static List<Categorie_Entite> getCategorieList(java.lang.Boolean aWithNoChoice) {
        ArrayOfcategorie wsCatList = getCategorieListWS(aWithNoChoice);
        List<Categorie_Entite> categorieList = new ArrayList<Categorie_Entite>();
        Categorie_Entite uneCategorie;
        for (int i = 0; i < wsCatList.categorie.size(); i++)
        {
        uneCategorie = new Categorie_Entite(wsCatList.categorie.get(i).getID().intValue(),
                wsCatList.categorie.get(i).getINTITULE().getValue().toString(),
                wsCatList.categorie.get(i).getDESCRIPTION().getValue().toString(),
                wsCatList.categorie.get(i).getPID().intValue()
                );
        categorieList.add(uneCategorie);
        }
        return categorieList;
    }

    /**
    * Implémentation d'une méthode pour formater la liste des produits conformément à l'application Web
    * @param aDescriptionNom définit les termes à rechercher dans l'intitulé et la description du produit
    * @return une liste de produits (cf. DTL)
    */
    public static List<Produit_Entite> getProduitList(java.lang.String aDescriptionNom) {
        ArrayOfproduit wsProList = getProduitListWS(aDescriptionNom);
        List<Produit_Entite> produitList = new ArrayList<Produit_Entite>();
        Produit_Entite unProduit;
        for (int i = 0; i < wsProList.produit.size(); i++)
        {
        unProduit = new Produit_Entite(wsProList.produit.get(i).getID().intValue(),
                wsProList.produit.get(i).getINTITULE().getValue().toString(),
                wsProList.produit.get(i).getDESCRIPTION().getValue().toString(),
                wsProList.produit.get(i).getPRIX().floatValue(),
                wsProList.produit.get(i).getQUANTITE().intValue(),
                wsProList.produit.get(i).getIDCAT().intValue()
                );
        produitList.add(unProduit);
        }
        return produitList;
    }

    /**
    * Implémentation d'une méthode pour formater la liste des produits conformément à l'application Web
    * @param aDescriptionNom définit les termes à rechercher dans l'intitulé et la description du produit
    * @param aIDCAT définit l'identifiant de la catégorie à laquelle doit appartenir le produit
    * @return une liste de produits (cf. DTL)
    */
    public static List<Produit_Entite> getProduitList(java.lang.String aDescriptionNom, java.lang.Integer aIDCAT) {
        ArrayOfproduit wsProList = getProduitListDansCategorieWS(aDescriptionNom, aIDCAT);
        List<Produit_Entite> produitList = new ArrayList<Produit_Entite>();
        Produit_Entite unProduit;
        for (int i = 0; i < wsProList.produit.size(); i++)
        {
        unProduit = new Produit_Entite(wsProList.produit.get(i).getID().intValue(),
                wsProList.produit.get(i).getINTITULE().getValue().toString(),
                wsProList.produit.get(i).getDESCRIPTION().getValue().toString(),
                wsProList.produit.get(i).getPRIX().floatValue(),
                wsProList.produit.get(i).getQUANTITE().intValue(),
                wsProList.produit.get(i).getIDCAT().intValue()
                );
        produitList.add(unProduit);
        }
        return produitList;
    }
    
    /**
    * Implémentation d'une méthode pour formater un produit conformément à l'application Web
    * @param aIDPRO définit l'identifiant du produit
    * @return un produit (cf. DTL)
    */
    public static Produit_Entite getProduit(java.lang.Integer aIDPRO) {
        Produit wsPro = getProduitWS(aIDPRO);
        Produit_Entite unProduit = new Produit_Entite(wsPro.getID().intValue(),
                wsPro.getINTITULE().getValue().toString(),
                wsPro.getDESCRIPTION().getValue().toString(),
                wsPro.getPRIX().floatValue(),
                wsPro.getQUANTITE().intValue(),
                wsPro.getIDCAT().intValue()
                );
        return unProduit;
    }

}
